<?php

namespace log;


use think\facade\App;

class File
{
    private $savePath;

    // 实例化并传入参数
    public function __construct($config = [])
    {

        $this->savePath = App::getRuntimePath() . '/log/bs/';
        if (!is_dir($this->savePath)) mkdir($this->savePath, 0777, true);
    }

    /**
     * 日志写入接口
     * @access public
     * @param array $log 日志信息
     * @param bool $depr 是否写入分割线
     * @return bool
     */
    public function save(array $log = [], $depr = true)
    {
        $this->diy($log, 'debug');
        return true;
    }

    /**添加的静态方法
     * @param array|string|object $log 任何内容
     * @param string $type 自定义标识
     * @return bool
     * @example \log\Mongo::add($baseData,'contract_add');     *
     */
    public static function add($log, $type = 'debug', $fileName = '')
    {
        return (new self())->logMessage($log, $type, $fileName);
    }

    public function diy($logs, $type = 'error', $fileName = '')
    {
        return $this->logMessage($logs, $type, $fileName);

    }

    /**
     * @param $message
     * @param string $type
     * @param $logFileName
     * @return false|int
     */
    function logMessage($message, string $type = 'info', string $logFileName = '')
    {
        $logFilePath = $this->savePath . date('Ymd') . '/'; // 指定日志文件路径
        if (!is_dir($logFilePath)) @mkdir($logFilePath, 0777, true);
        // 获取当前时间
        $timestamp = date('Y-m-d H:i:s');
        $fileName = !empty($logFileName) ? (date('d') . '_' . $logFileName) : date('d') . '.log';
        // 格式化日志内容
        if (is_array($message) || is_object($message)) {
            $formattedMessage = json_encode($message, JSON_UNESCAPED_UNICODE); // 将数组或对象转换为 JSON 字符串
        } else {
            $formattedMessage = $message;
        }

        $logEntry = sprintf("[%s] [%s]: %s\n", $timestamp, $type, $formattedMessage);

        // 独立记录的日志级别
        $filename = $logFilePath . $fileName;
        $limitSize = 2 * 1024 * 1024;
        //检测日志文件大小，超过配置大小则备份日志文件重新生成
        if (is_file($filename) && floor($limitSize) <= filesize($filename)) {
            rename($filename, dirname($filename) . '/' . time() . '-' . basename($filename));
        }

        // 将日志内容追加到日志文件
        return file_put_contents($logFilePath . $fileName, $logEntry, FILE_APPEND);
    }

}
